/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package org.apli.haiam.ejb.interfaces;

import java.util.Date;
import java.util.List;
import javax.ejb.Local;
import org.apli.haiam.ejb.entidades.AdmAccion;
import org.apli.haiam.ejb.entidades.AdmMenu;
import org.apli.haiam.ejb.entidades.AdmRol;
import org.apli.haiam.ejb.entidades.AdmSistema;
import org.apli.haiam.ejb.entidades.AdmUsuario;

/**
 * Contiene los métodos necesarios para iniciar una sesión en el sistema. <p>
 * <H6>Soporte:HAIAM
 * <I>david_s_1086@hotmail.com,david.carranza@haiam.gob.ec</I></H6>
 * @author david Carranza
 * @version 1.0 30/07/2014
 */
@Local
public interface AdministradorPerfilHaiam {

 /**
     * Permite asignar acciones a un rol.
     *
     * @param rol
     * @param user el usuario que ejecuta la accion
     * @throws Exception si existe un error
     */
    public void asignarAccionesRol(AdmRol rol, Object user) throws Exception;

    /**
     * Permite asignar roles a un usuario.
     *
     * @param usuario el usuario
     * @param user el usuario que ejecuta la acción
     * @throws Exception si existe un error
     */
    public void asignarRolesUsuario(AdmUsuario usuario, Object user) throws Exception;

    /**
     * Obtiene un usuario del sistema correspondiente a un nombre de usuario.
     *
     * @param username nombre de usuario
     * @param usuario el usuario con permisos en el Directorio Activo
     * @return el usuario del sistema, null si no existe o el usuario no tiene
     * los permisos en el Directorio Activo
     */
    public Object getUsuario(String username, AdmUsuario usuario);

    /**
     * Obtiene las acciones asociadas a un rol.
     *
     * @param rol el Rol
     * @param tipo si es 0 devuelve las acciones que tiene el Rol, si es 1
     * devuelve las acciones que no tiene el Rol
     * @return la lista de acciones
     * @throws Exception si existe un error
     */
    public List<AdmAccion> getAccionesPorRol(AdmRol rol, int tipo) throws Exception;

    /**
     * Obtiene las acciones asociadas a un rol.
     *
     * @param rol el Rol
     * @param sistema el sistema
     * @param tipo si es 0 devuelve las acciones que tiene el Rol, si es 1
     * devuelve las acciones que no tiene el Rol
     * @return la lista de acciones
     * @throws Exception si existe un error
     */
    public List<AdmAccion> getAccionesPorRolPorSistema(AdmRol rol, AdmSistema sistema, int tipo) throws Exception;

    /**
     * Obtiene los roles asociados a un usuario.
     *
     * @param user el usuario
     * @param tipo si es 0 devuelve los roles que tiene el suario, si es 1
     * devuelve los roles que no tiene el usuario
     * @return la lista de roles
     * @throws Exception si existe un error
     */
    public List<AdmRol> getRolesPorUsuario(AdmUsuario user, int tipo) throws Exception;

    /**
     * Obtiene los roles asociados a un usuario.
     *
     * @param user el usuario
     * @param sistema el sistema
     * @param tipo si es 0 devuelve los roles que tiene el suario, si es 1
     * devuelve los roles que no tiene el usuario
     * @return la lista de roles
     * @throws Exception si existe un error
     */
    public List<AdmRol> getRolesPorUsuarioPorSistema(AdmUsuario user, AdmSistema sistema, int tipo) throws Exception;

    /**
     * Modifica un registro en la tabla asociada a la clase de entidad
     * (EJB3).sin registrar un usuario Metodo utilizado para bloquear un
     * usuario.
     *
     * @param entity la entidad a modificar
     * @throws Exception si existe un error
     */
    public void modificarSinUser(AdmUsuario entity) throws Exception;

    /**
     * Permite asignar menus a un sistema.
     *
     * @param sistema el usuario
     * @param user el usuario que ejecuta la acción
     * @throws Exception si existe un error
     */
    public void asignarMenuSistema(AdmSistema sistema, Object user) throws Exception;

    /**
     * Permite eliminar menus a un sistema.
     *
     * @param sistema el usuario
     * @param user el usuario que ejecuta la acción
     * @throws Exception si existe un error
     */
    public void eliminarMenuSistema(AdmSistema sistema, Object user) throws Exception;

    /**
     * Obtiene los menus asociadas a un sistema.
     *
     * @param sistema el sistema
     * @param tipo si es 0 devuelve las acciones que tiene el Rol, si es 1
     * devuelve las acciones que no tiene el Rol
     * @return la lista de menus
     * @throws Exception si existe un error
     */
    public List<AdmMenu> getMenusPorSistema(AdmSistema sistema, int tipo) throws Exception;

    /**
     * Modifica un registro en la tabla Usuario(EJB3).
     *
     * @param usuario el usuario a modificar
     * @param user el usuario que modifica la entidad
     * @throws Exception si existe un error
     */
    public void cambiarContraseniaUsuario(AdmUsuario usuario, Object user) throws Exception;

    /**
     * Obtiene las acciones asociadas a un rol.
     *
     * @param menu el Rol
     * @param sistema el sistema
     * @param tipo si es 0 devuelve las acciones que tiene el Rol, si es 1
     * devuelve las acciones que no tiene el Rol
     * @return la lista de acciones
     * @throws Exception si existe un error
     */
    public List<AdmAccion> getAccionesPorMenuPorSistema(AdmMenu menu, AdmSistema sistema, int tipo) throws Exception;

    /**
     * Devuelve la fecha de la BD. <p /> Detalle:<br /> POSTGRES, MYSQL<BR />
     * SELECT now()<BR /> SQLSERVERL<BR /> SELECT getDate()<BR /> ORACLE<BR />
     * SELECT sysdate FROM dual <br />
     *
     * @return fecha de la BD.
     * @throws java.lang.Exception si existe un error
     */
    public Date getFechaDb() throws Exception;
}